<?php
    namespace Npfe\Model;
    use Think\Model;
    class ThjModel extends Model {
        var $string_num = array (
            0 => '零',
            1 => '壹',
            2 => '贰',
            3 => '叁',
            4 => '肆',
            5 => '伍',
            6 => '陆',
            7 => '柒',
            8 => '捌',
            9 => '玖' 
        ); // 中文大写数字
        var $string_cn1 = array (
            1 => '',
            2 => '拾',
            3 => '佰',
            4 => '仟' 
        ); 
        // 中文单位
        var $string_cn2 = array (
            1 => '角',
            2 => '分' 
        ); 
        // 中文单位
        var $moneyString = ''; // 最后的中文结果
        function getMoneyString($num) {
            $this->moneyString = '';
            /*
            * if (!preg_match("^[0-9]+[\.]?[0-9]{0,2}$",$num)){ return '初始错误，数值非法'; }
            */
            $tmp = explode ( '.', $num ); // 把小数和整数分别来计算
            $num1 = $tmp [0];
            if (empty ( $tmp [1] )) {
                $num2 = 0;
            } else {
                $num2 = $tmp [1];
            }
            /*
            * 处理整数部分 把整数分为三中情况，1：亿以上的；2：万以上的；3：万以下的 分别为第9（亿），第5（万）位
            */
            if ($num1 > 0) {
                $this->getAll ( $num1, '圆' ); // 如果整数部分不为0 最后单位为圆
            } else {
                $this->moneyString = '零圆';
            }
            // 处理小数

            if (intval ( $num2 ) == 0) {
                $this->moneyString .= '整'; // 整数处理完毕，如果小数不存在 则加个‘整’字
            } else {
                // 小数这里我是直接一个数一个数取的
                if ($num2 {0} == 0) {
                    // 十分位为0的情况
                    $this->moneyString .= '零' . $this->string_num [$num2 {1}] . $this->string_cn2 [2];
                } elseif ($num2 {1} == 0) {
                    // 百分位为0的情况
                    $this->moneyString .= $this->string_num [$num2 {0}] . $this->string_cn2 [1] . '整';
                } else {
                    // 都不为0的情况
                    $this->moneyString .= $this->string_num [$num2 {0}] . $this->string_cn2 [1] . $this->string_num [$num2 {1}] . $this->string_cn2 [2];
                }
            }
            return $this->moneyString;
        }
        function getAll($num, $dw) {
            $numlen = strlen ( $num );
            if ($num < 10000) {
                if ($num == 0) {
                    $this->moneyString .= $dw;
                } else {
                    $this->moneyString .= $this->getPart ( $num ) . $dw;
                }
            } elseif ($num < 100000000) {
                $this->moneyString .= $this->getAll ( substr ( strval ( $num ), 0, ($numlen - 4) ), '万' ) . $this->getAll ( substr ( strval ( $num ), ($numlen - 4) ), $dw );
            } else {
                // 亿是最大单位，如果超过亿，则把亿以上部分数字当成一部分进行读取
                $this->moneyString .= $this->getAll ( substr ( strval ( $num ), 0, ($numlen - 8) ), '亿' ) . $this->getAll ( substr ( strval ( $num ), ($numlen - 8) ), $dw );
            }
        }
        // 0-9999数字的读取
        function getPart($num) {
            $is_zero = false; // 判断是否有连续零的标记
            $numlen = strlen ( $num );
            $str = '';
            $x = 0;
            for($i = $numlen; $i > 0; $i --) {
                $t = $num {$x};
                if (intval ( substr ( $num, $x ) ) == 0) {
                    // 如果从当前$x位置出到最后为连续0则留空
                    $str .= '';
                } elseif (! $is_zero && $t == 0) {
                    // 第一次出现0则。。。
                    $str .= '零';
                    $is_zero = true;
                } elseif ($is_zero && $t == 0) {
                    // 连续出现则留空
                    $str .= '';
                } else {
                    $str .= $this->string_num [$t] . $this->string_cn1 [$i];
                    $is_zero = false;
                }
                $x ++;
            }
            return $str;
        }
}